package com.ntd.study.database;

/**
 * mongodb 相关信息
 * 1.面向集合文档的存储：适合存储Bson（json的扩展）形式的数据
 * 2.格式自由，数据格式不固定，生产环境下修改结构都可以不影响程序运行
 * 3.强大的查询语句，面向对象的查询语言，基本覆盖sql语言的所有能力
 * 4.完整的索引支持，支持查询计划
 * 5.支持复制和自动故障转移
 * 6.支持二进制数据及大型对象（文件）的高效存储
 * 7.使用分片集群提升系统扩展性
 * 8.使用内存映射存储引擎，把磁盘的IO操作转换成内存的操作
 * <p>
 * 查询优化
 * 1.开启内置的查询分析器，记录读写操作效率 db.setProfilingLevel(n,{m}),n的取值可选0，1，2
 * |-- 0：不记录（默认值）
 * |-- 1：记录所有慢操作，m必须定义为ms，用于定义慢速查询时间的阈值
 * |-- 2：记录所有读写操作
 * 2.查询监控结果
 * 监控结果保存在一个特殊的盖子集合system.profile里，这个集合分配了128k的空间，要确保监控分析数据不会消耗太多的系统性资源，盖子集合维护了自然的插入顺序，可以使用$natural操作符进行排序，如db.system.profile.find().sort({'$natural':-1}).limit(5)
 * <p>
 * 执行计划 explain
 * <p>
 * 索引注意事项
 * 1.索引很有用，但是占用内存，写入变慢
 * 2.一次查询只是用一个索引，所以多个字段的查询需要复合索引才能更加高效
 * 3.复合索引的顺序非常重要
 * 4.在数据量庞大之前尽量进行查询优化和构建索引
 * 5.避免昂贵查询，使用查询分析器找出昂贵索引
 * 6.通过减少扫描文档数量来优化查询
 * 7.索引是用来查询小范围数据的
 * 8.避免使用索引的情况
 * |-- 每次查询都需要返回大部分数据的文档
 * |-- 写比读多
 */
public class StudyDataBaseMongodb {
}
